struct stat;

// system calls
int exit(int) __attribute__((noreturn));
int exec(const char*, char**);
int write(int, char, int);


// ulib.c
/**
 * @brief 将字符串t的内容复制给s
 * @param s 目标字符串指针
 * @param t 源字符串指针
 * @return 目标字符串指针
*/
char*       strcpy(char *s, const char *t);
/**
 * @brief 比较两个字符串的大小
 * @param p 待比较的前一个字符串
 * @param q 待比较的后一个字符串
 * @return 比较结果：0: 相等    +:前者大    -:后者大
*/
int         strcmp(const char* p, const char* q);
/**
 * @brief 计算字符串长度（不包含'\0'）
 * @param s 待计算的字符串
 * @return 字符串s的长度
*/
uint        strlen(const char* s);
/**
 * @brief 将指针指向的地址统一赋值为c
 * @param dst 指向待赋值地址的指针
 * @param c 所赋的值
 * @param n 赋值的长度
 * @return 赋值的开始地址
*/
void*       memset(void *dst, int c, uint n);

// printf.c
/**
 * @brief 向文件描述符fd输出标准格式字符串
 * @param fd 文件描述符
 * @param fmt 标准格式字符串
 * @param ... 可变参数列表
*/
void        fprintf(int fd, const char *fmt, ...);
/**
 * @brief 在终端打印标准格式字符串
 * @param fmt 标准格式字符串
 * @param ... 可变参数列表
*/
void        printf(const char *fmt, ...);